package article

import (
	"go-web/model"
	"net/http"
	"strconv"

	"github.com/gin-gonic/gin"
)

// Swagger 参考地址: https://juejin.im/post/5d3f92356fb9a06b317b3baf

// Insert article 添加
// @Summary 提交新的文字内容
// @ID 1
// @Tags 文字
// @version 1.0
// @Accept application/x-json-stream
// @Param article body model.Article true "文章"
// @Success 200 object model.Result 成功返回值
// @Failure 409 object model.Result 添加失败
// @Router /kol/article [post]
func Insert(context *gin.Context) {
	article := model.Article{}

	id := -1
	message := "数据添加失败"

	if e := context.ShouldBindJSON(&article); e == nil {
		id = article.Insert()
		message = "数据添加成功"
	}

	// 返回统一的 struc  Result
	result := model.Result{
		Code:    http.StatusOK,
		Message: message,
		Data:    id,
		// Data:    gin.H{"id": id},
	}

	context.JSON(http.StatusOK, result)
}

// GetByID 更加 id 获取文章
// @Summary 通过文章 id 获取单个文章内容
// @version 1.0
// @Accept application/x-json-stream
// @Param id path int true "id"
// @Success 200 {object} model.Result 成功后返回值
// @Router /kol/article/{id} [get]
func GetByID(context *gin.Context) {
	id := context.Param("id")
	i, e := strconv.Atoi(id)
	if e != nil {
		context.JSON(http.StatusBadRequest, model.Result{
			Code:    http.StatusBadRequest,
			Message: "id 不是 int 类型，id 转换失败",
			Data:    e.Error(),
		})
	}

	article := model.Article{
		ID: i,
	}

	art := article.FindByID()
	context.JSON(http.StatusOK, model.Result{
		Code:    http.StatusOK,
		Message: "查询成功",
		Data:    art,
	})
}

// GetAll get article list
// @Summary 获取所有的文章
// @version 1.0
// @Accept application/x-json-stream
// @Success 200 object model.Result 成功后返回值
// @Router /kol/articles [get]
func GetAll(context *gin.Context) {
	article := model.Article{}
	articles := article.FindAll()
	context.JSON(http.StatusOK, model.Result{
		Code:    http.StatusOK,
		Message: "查询成功",
		Data:    articles,
	})
}

// DeleteByID 删除 ID
// @Summary 通过 id 删除指定文章
// @version 1.0
// @Accept application/x-json-stream
// @Param id path int true "id"
// @Success 200 object model.Result 成功后返回值
// @Router /kol/article/{id} [delete]
func DeleteByID(context *gin.Context) {
	id := context.Param("id")
	i, e := strconv.Atoi(id)
	if e != nil {
		// log.Panicln("id 不是 int 类型，id 转换失败", e.Error())
		context.JSON(http.StatusBadRequest, model.Result{
			Code:    http.StatusBadRequest,
			Message: "删除失败",
		})
	}
	artile := model.Article{ID: i}
	artile.DeleteOne()
	context.JSON(http.StatusOK, model.Result{
		Code:    http.StatusOK,
		Message: "删除成功",
	})
}
